package gui;

import java.awt.Desktop;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.net.URI;
import java.util.ArrayList;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class SearchScreen extends JFrame implements ActionListener {

	private JLabel buscaText = new JLabel("Livre: ");
	private JLabel numeroText = new JLabel("Número: ");
	private JLabel ministroText = new JLabel("Ministro: ");
	private JLabel orgaoText = new JLabel("Orgão Julgador: ");
	private JLabel dataInicialText = new JLabel("Data: ");
	private JLabel dataFinalText = new JLabel(" até ");
	private JLabel localidadeText = new JLabel("Localidade: ");
	private JLabel autoridadeText = new JLabel("Autoridade: ");
	private JLabel apelidoText = new JLabel("Apelido/Nome: ");
	private JLabel tituloText = new JLabel("Título: ");
	private JLabel barra1Text = new JLabel("/");
	private JLabel barra2Text = new JLabel("/");
	private JLabel barra3Text = new JLabel("/");
	private JLabel barra4Text = new JLabel("/");
	
	private JTextField buscaInput = new JTextField(50);
	private JTextField numeroInput = new JTextField(8);
	private JTextField ministroInput = new JTextField(20);
	private JTextField orgaoInput = new JTextField(20);

	private JTextField dataInicialDiaInput = new JTextField(2);
	private JTextField dataInicialMesInput = new JTextField(2);
	private JTextField dataInicialAnoInput = new JTextField(4);
	private JTextField dataFinalDiaInput = new JTextField(2);
	private JTextField dataFinalMesInput = new JTextField(2);
	private JTextField dataFinalAnoInput = new JTextField(4);
	
	private JTextField autoridadeInput = new JTextField(20);
	private JTextField localidadeInput = new JTextField(20);
	private JTextField tituloInput = new JTextField(30);
	private JTextField apelidoInput = new JTextField(20);
	
	private JPanel painelAutoridade = new JPanel();
	private JPanel painelLocalidade = new JPanel();
	private JPanel painelTitulo = new JPanel();
	private JPanel painelApelido = new JPanel();
	
	private JRadioButton tudoRadio = new JRadioButton("Tudo", true);
	private JRadioButton legisRadio = new JRadioButton("Legislação", false);
	private JRadioButton jurisRadio = new JRadioButton("Jurisprudência", false);
	private ButtonGroup radioGroup = new ButtonGroup();
	
	private JPanel painelBusca = new JPanel();
	private JPanel painelNumero = new JPanel();
	private JPanel painelMinistroENumero = new JPanel();
	private JPanel painelOrgao = new JPanel();
	private JPanel painelData = new JPanel();
	private JPanel painelBotoes = new JPanel();
	private JPanel painelConectivos = new JPanel();
	
	private JButton eButton = new JButton("e");
	private JButton ouButton = new JButton("ou");
	private JButton naoButton = new JButton("nao");
	private JButton adjButton = new JButton("adj");
	private JButton mesmoButton = new JButton("mesmo");
	private JButton proxButton = new JButton("prox");
	private JButton cifraoButton = new JButton("$");
	
	
	private JButton botaoBuscar = new JButton("Buscar");
	
	private String busca; 
	private String numero; 
	private String datainicio; 
	private String datafim;
	private String ministro; 
	private String orgao ;
	private String autoridade;
	private String localidade;
	private String titulo;
	private String apelido;
	private boolean jurisprudencia = true; 
	private boolean legislacao = true; 
	
	private Facade facade;
	
	public SearchScreen() {
		super("JudLaw - Busca");
		setLayout(new FlowLayout());
		
		
		painelBusca.add(buscaText);
		painelBusca.add(buscaInput);
		
		painelMinistroENumero.add(numeroText);
		painelMinistroENumero.add(numeroInput);
		
		painelMinistroENumero.add(ministroText);
		painelMinistroENumero.add(ministroInput);
		
		painelOrgao.add(orgaoText);
		painelOrgao.add(orgaoInput);
		
		painelData.add(dataInicialText);
		painelData.add(dataInicialDiaInput);
		painelData.add(barra1Text);
		painelData.add(dataInicialMesInput);
		painelData.add(barra2Text);
		painelData.add(dataInicialAnoInput);
		painelData.add(dataFinalText);
		painelData.add(dataFinalDiaInput);
		painelData.add(barra3Text);
		painelData.add(dataFinalMesInput);
		painelData.add(barra4Text);
		painelData.add(dataFinalAnoInput);
		
		painelAutoridade.add(autoridadeText);
		painelAutoridade.add(autoridadeInput);
		
		painelApelido.add(apelidoText);
		painelApelido.add(apelidoInput);
		
		painelLocalidade.add(localidadeText);
		painelLocalidade.add(localidadeInput);
		
		painelTitulo.add(tituloText);
		painelTitulo.add(tituloInput);
		
		radioGroup.add(tudoRadio);
		radioGroup.add(jurisRadio);
		radioGroup.add(legisRadio);
		painelBotoes.add(tudoRadio);
		painelBotoes.add(jurisRadio);
		painelBotoes.add(legisRadio);
		tudoRadio.addItemListener(new RadioButtonHandler("tudo"));
		jurisRadio.addItemListener(new RadioButtonHandler("jurisprudencia"));
		legisRadio.addItemListener(new RadioButtonHandler("legislacao"));
		
		eButton.addActionListener(new ConectivoHandler(" e "));
		ouButton.addActionListener(new ConectivoHandler(" ou "));
		adjButton.addActionListener(new ConectivoHandler(" adj "));
		naoButton.addActionListener(new ConectivoHandler(" nao "));
		proxButton.addActionListener(new ConectivoHandler(" prox "));
		mesmoButton.addActionListener(new ConectivoHandler(" mesmo "));
		cifraoButton.addActionListener(new ConectivoHandler(" $ "));
		painelConectivos.add(eButton);
		painelConectivos.add(ouButton);
		painelConectivos.add(adjButton);
		painelConectivos.add(naoButton);
		painelConectivos.add(proxButton);
		painelConectivos.add(mesmoButton);
		painelConectivos.add(cifraoButton);
		
		botaoBuscar.addActionListener(this);
		painelBotoes.add(botaoBuscar);
		

		add(painelBusca);
		add(painelConectivos);
		add(painelMinistroENumero);
		add(painelOrgao);
		add(painelData);

		add(painelAutoridade);
		add(painelLocalidade);
		add(painelApelido);
		add(painelTitulo);
		
		add(painelBotoes);
		
		facade = Facade.getInstance();
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		
		if(!(buscaInput.getText().isEmpty())) {
			busca = buscaInput.getText();
		}
		if(!(numeroInput.getText().isEmpty())) {
			numero = numeroInput.getText();
		}
		if(!(ministroInput.getText().isEmpty())) {
			ministro = ministroInput.getText();
		}
		if(!(orgaoInput.getText().isEmpty())) {
			orgao = orgaoInput.getText();
		}
		if(!(dataInicialDiaInput.getText().isEmpty() && dataInicialMesInput.getText().isEmpty()
				&& dataInicialAnoInput.getText().isEmpty())) {
			datainicio = dataInicialAnoInput.getText() + dataInicialMesInput.getText() + dataInicialDiaInput.getText();
		}
		if(!(dataFinalDiaInput.getText().isEmpty() && dataFinalMesInput.getText().isEmpty()
				&& dataFinalAnoInput.getText().isEmpty())) {
			datafim = dataFinalAnoInput.getText() + dataFinalMesInput.getText() + dataFinalDiaInput.getText();
		}
		if(!(autoridadeInput.getText().isEmpty())) {
			autoridade = autoridadeInput.getText();
		}
		if(!(localidadeInput.getText().isEmpty())) {
			localidade = localidadeInput.getText();
		}
		if(!(tituloInput.getText().isEmpty())) {
			titulo = tituloInput.getText();
		}
		if(!(apelidoInput.getText().isEmpty())) {
			apelido = apelidoInput.getText();
		}
		ArrayList<String> links = facade.pesquisa(busca, numero, datainicio, datafim, ministro, 
						orgao, autoridade,localidade, titulo, apelido, jurisprudencia, legislacao);
		for(int k=0;k < links.size();k++) {
			//TODO Open in browser.
			try {
			URI url = new URI(links.get(k));
			System.out.println(url.toString());
			Desktop desktop = Desktop.getDesktop();
			desktop.browse(url);
			} catch(Exception e) {
				System.out.println(e.getMessage());
			}
			busca = null;
			numero = null;
			ministro = null;
			orgao = null;
			datainicio = null;
			datafim = null;
			autoridade = null;
			localidade = null;
			titulo = null;
			apelido = null;
		}
		
		
	}

	private class RadioButtonHandler implements ItemListener {
		private String type;
		public RadioButtonHandler(String type) {
			this.type = type;
		}
		@Override
		public void itemStateChanged(ItemEvent e) {
			if (type == "tudo" ) {
				jurisprudencia = true;
				legislacao = true;
			} else if(type == "legislacao") {
				legislacao = true;
				jurisprudencia = false;
			} else if(type == "jurisprudencia") {
				jurisprudencia = true;
				legislacao = false;
			}
			
		}
	}
	
	private class ConectivoHandler implements ActionListener {
		private String conectivo;
		public ConectivoHandler(String conectivo) {
			this.conectivo = conectivo;
		}
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			buscaInput.setText(buscaInput.getText() + conectivo);
			
		}
		
	}
}

